home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / spreotus / 123fin / datapgm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  9.0 KB  |  353 lines

  1. 1  KEY(10) ON:ON KEY(10) GOSUB 3
  2. 2   GOTO 5
  3. 3  RUN"MENU.BAT"+CHR$(13)
  4. 5  CLS
  5. 6  LOCATE 23,24:PRINT "Press F10 to EXIT program.
  6. 100  REM ------------------------------
  7. 110  N$=    "DATA ANALYSIS PROGRAMS"
  8. 120  REM ------------------------------
  9. 130  OPTION BASE 1           'SET UP ARRAY SUBSCRIPTS
  10. 140  DIM P(80),R(80),D(80)
  11. 150  GOSUB 6200              'INITIALIZE
  12. 160  REM SET UP MENU
  13. 170  X$(1)="INPUT DATA"
  14. 180  X$(2)="PLOT DATA"
  15. 190  X$(3)="MEAN AND STANDARD DEVIATION"
  16. 200  X$(4)="3-POINT MOVING AVERAGE"
  17. 210  X$(5)="WEIGHTED MOVING AVERAGE"
  18. 220  X$(6)="4-POINT CENTERED AVERAGE"
  19. 230  X$(7)="LINEAR REGRESSION"
  20. 231  X$(8)="TERMINATE PROGRAM"
  21. 240  N=8 : GOSUB 7000
  22. 241  IF X=8 THEN RUN"MENU.BAT
  23. 250  ON X GOSUB 690,920,1140,1360,1560,1760,1960
  24. 260  GOTO 150
  25. 270  REM -----------------------------------
  26. 280  REM DRAW AXES
  27. 290  REM -----------------------------------
  28. 300  CLS
  29. 310  FOR I=1 TO 21                          'Y AXIS
  30. 320    LOCATE I,6 : PRINT " I"
  31. 330  NEXT I
  32. 340  FOR I=1 TO 16 STEP 5                   'Y AXIS SCALE
  33. 350   LOCATE I,6 : PRINT"-"
  34. 360   LOCATE I,1
  35. 365   PRINT USING "####"; MX-(MX-MN)/4*(I-1)/5
  36. 370  NEXT I
  37. 380  LOCATE 21,8
  38. 390  FOR I= 1 TO 32                         'X AXIS
  39. 400    PRINT "-";
  40. 410  NEXT I
  41. 420  FOR I=8 TO 38 STEP 5                   'X AXIS TICKS
  42. 430    LOCATE 21,I : PRINT "I";
  43. 440    LOCATE 22,I-1 : PRINT I-7
  44. 450  NEXT I
  45. 460  RETURN
  46. 470  REM ----------------------------------
  47. 480  REM SCALE DATA AND PLOT IT
  48. 490  REM ----------------------------------
  49. 500  FOR I= 1 TO ND
  50. 510    P1=21-INT(20*(D(I)-MN)/(MX-MN))
  51. 520    P2=21-INT(20*(R(I)-MN)/(MX-MN))
  52. 530  IF CH$ <> "I" THEN 570
  53. 540    IF P1 > 21 OR P1 < 1 THEN GOTO 670
  54. 550    LOCATE P1,I+8 : PRINT "*"
  55. 560    GOTO 650
  56. 570  IF CH$ <> "R" THEN 610
  57. 580    IF P2 > 21 OR P2 < 1 THEN GOTO 670
  58. 590    LOCATE P2,I+8 : PRINT "+"
  59. 600    GOTO 650
  60. 610  REM MUST BE BOTH PLOTS
  61. 620    IF P1 > 21 OR P1 < 1 OR P2 > 21 OR P2 < 1 THEN 670
  62. 630    LOCATE P1,I+8 : PRINT "*"
  63. 640    LOCATE P2,I+8 : PRINT "+"
  64. 650  NEXT I
  65. 660  RETURN
  66. 670  ERF=1 : RETURN
  67. 680  RETURN
  68. 690  REM -----------------------------------
  69. 700  N$=         "INPUT DATA"
  70. 710  REM -----------------------------------
  71. 720  REM THIS PROGRAM ACCEPTS UP TO 80 DATA VALUES
  72. 730  GOSUB 6200                       'INITIALIZE
  73. 740  Q1$="TYPE IN DATA VALUES IN ORDER"
  74. 750  Q2$="TYPE D WHEN DONE"
  75. 760  Q3$=""    : GOSUB 5000           'DIALOG
  76. 770  ND=0                             'NO. OF DATA POINTS
  77. 780  J=6
  78. 790  FOR I= 1 TO 80
  79. 800    LOCATE J,10
  80. 810    PRINT "                "       'BLANK LINE
  81. 820    LOCATE J,5
  82. 830    PRINT "VALUE ";I; TAB(20);
  83. 840    INPUT D$
  84. 850    IF D$="D" OR D$="d" THEN 910
  85. 860    ND=ND+1                        'COUNT DATA POINTS
  86. 870    D(I)=VAL(D$)                   'STORE DATA
  87. 880    J=J+1
  88. 890    IF J=16 THEN J=6               'RESET POINTER
  89. 900  NEXT I
  90. 910  RETURN
  91. 920  REM ------------------------------
  92. 930  N$=      "PLOT DATA ROUTINE"
  93. 940  REM ------------------------------
  94. 950  Q2$="INPUT OR REDUCED OR BOTH"
  95. 955  Q3$="DATA (I OR R OR B)"
  96. 960  GOSUB 5000
  97. 970  GOSUB 5400                   'GET CHAR
  98. 980  IF CH$ ="I" OR CH$ ="R" OR CH$="B" THEN 990 ELSE 970
  99. 990  Q1$="" :Q2$=""
  100. 1000  Q3$="CHOOSE MAX SCALE : "
  101. 1010  GOSUB 5000 : INPUT MX
  102. 1020  Q3$="CHOOSE MIN SCALE : "
  103. 1030  GOSUB 5000 : INPUT MN
  104. 1040  GOSUB 270                   'DRAW AXES
  105. 1050  ERF=0
  106. 1060  GOSUB 470                   'PLOT DATA
  107. 1070  IF ERF<>1 THEN 1110         'OUT OF RANGE ERROR
  108. 1080  Q1$="DATA OUT OF RANGE"
  109. 1090  Q2$="PLEASE RESPECIFY" :BEEP
  110. 1100  GOTO 1000
  111. 1110  LOCATE 24,1
  112. 1120  PRINT "STRIKE ANY KEY TO CONTINUE";
  113. 1130  CH$=INKEY$ :IF CH$="" THEN 1130 ELSE RETURN
  114. 1140  REM -------------------------------------
  115. 1150  N$=     "MEAN AND STANDARD DEVIATION"
  116. 1160  REM -------------------------------------
  117. 1170  GOSUB 6200
  118. 1180  REM COMPUTE THE MEAN
  119. 1190  ME=0
  120. 1200  FOR I = 1 TO ND
  121. 1210      ME=ME+D(I)
  122. 1220  NEXT I
  123. 1230  ME=ME/ND
  124. 1240  REM COMPUTE STANDARD DEVIATION
  125. 1250  SD=0
  126. 1260  FOR I=1 TO ND
  127. 1270     SD=SD+(D(I)-ME)^2
  128. 1280  NEXT I
  129. 1290  SD=(SD/ND)^0.5
  130. 1300  PRINT "MEAN OF INPUT DATA";TAB(20);
  131. 1310  PRINT USING "######,.##";ME
  132. 1320  PRINT "STANDARD DEVIATION";TAB(20);
  133. 1330  PRINT USING "######,.##";SD
  134. 1340  GOSUB 7400
  135. 1350  RETURN
  136. 1360  REM -----------------------------
  137. 1370  N$=   "3-POINT MOVING AVERAGE"
  138. 1380  REM -----------------------------
  139. 1390  GOSUB 6200                       'INITIALIZE
  140. 1400  REM SET UP THE RESULT IN R(I)
  141. 1410  R(1)=0 : R(2)=0 : R(3)=0
  142. 1420  FOR I = 4 TO ND
  143. 1430    R(I)=(D(I-3)+D(I-2)+D(I-1))/3
  144. 1440  NEXT I
  145. 1450  Q1$="DO YOU WANT TO PRINT THE"
  146. 1460  Q2$="DATA  (Y OR N)"
  147. 1470  Q3$="" : GOSUB 5000
  148. 1480  GOSUB 7800                       'ASK YES OR NO
  149. 1490  IF YN$="N" THEN RETURN
  150. 1500  CLS
  151. 1510  FOR I = 4 TO ND
  152. 1520    PRINT R(I),
  153. 1530  NEXT I
  154. 1540  GOSUB 7400                       'WAIT FOR KEY
  155. 1550  RETURN
  156. 1560  REM ---------------------------------
  157. 1570  N$=  "3-PT. WEIGHTED MOVING AVERAGE"
  158. 1580  REM ---------------------------------
  159. 1590  GOSUB 6200                       'INITIALIZE
  160. 1600  REM SET UP THE RESULT IN R(I)
  161. 1610  R(1)=0 : R(2)=0 : R(3)=0
  162. 1620  FOR I = 4 TO ND
  163. 1630    R(I)=(D(I-3)+2*D(I-2)+3*D(I-1))/6
  164. 1640  NEXT I
  165. 1650  Q1$="DO YOU WANT TO PRINT THE"
  166. 1660  Q2$="DATA  (Y OR N)"
  167. 1670  Q3$="" : GOSUB 5000              'ASK YES OR NO
  168. 1680  GOSUB 7800
  169. 1690  IF YN$="N" THEN RETURN
  170. 1700  CLS
  171. 1710  FOR I = 4 TO ND
  172. 1720    PRINT R(I),
  173. 1730  NEXT I
  174. 1740  GOSUB 7400                       'WAIT FOR KEY
  175. 1750  RETURN
  176. 1760  REM -----------------------------
  177. 1770  N$=   "4-PT. CENTERED  AVERAGE"
  178. 1780  REM -----------------------------
  179. 1790  GOSUB 6200                       'INITIALIZE
  180. 1800  REM SET UP THE RESULT IN R(I)
  181. 1810  R(1)=0 : R(2)=0 : R(3)=0 : R(4)=0 : R(5)=0
  182. 1820  FOR I = 6 TO ND
  183. 1830    R(I)=(D(I-5)+2*(D(I-4)+D(I-3)+D(I-2))+D(I-1))/8
  184. 1840  NEXT I
  185. 1850  Q1$="DO YOU WANT TO PRINT THE"
  186. 1860  Q2$="DATA  (Y OR N)"
  187. 1870  Q3$="" : GOSUB 5000
  188. 1880  GOSUB 7800                       'ASK YES OR NO
  189. 1890  IF YN$="N" THEN RETURN
  190. 1900  CLS
  191. 1910  FOR I = 4 TO ND
  192. 1920    PRINT R(I),
  193. 1930  NEXT I
  194. 1940  GOSUB 7400                       'WAIT FOR KEY
  195. 1950  RETURN
  196. 1960  REM -----------------------------
  197. 1970  N$=      "LINEAR REGRESSION"
  198. 1980  REM -----------------------------
  199. 1990  GOSUB 6200                       'INITIALIZE
  200. 2000  SX=0 : SY=0 : SXY=0 : SX2=0
  201. 2010  FOR I = 1 TO ND
  202. 2020    SX=SX+I
  203. 2030    SY=SY+D(I)
  204. 2040    SXY=SXY+D(I)*I
  205. 2050    SX2=SX2+I^2
  206. 2060  NEXT I
  207. 2070  M=(SXY-SX*SY/ND)/(SX2-SX^2/ND)
  208. 2080  B=SY/ND-M*SX/ND
  209. 2090  PRINT "    Y=";M;"X + " ;B
  210. 2100  REM UPDATE RESULT ARRAY
  211. 2110  FOR I= 1 TO ND
  212. 2120    R(I)=B+M*I
  213. 2130  NEXT I
  214. 2140  GOSUB 7400
  215. 2150  RETURN
  216. 5000  REM        "DIALOG"
  217. 5001  ' -------------------------------
  218. 5002  '         DIALOGUE
  219. 5003  '
  220. 5004  'CALLING PARAMETERS:
  221. 5005  '   Q1$,Q2$,Q3$, = QUESTIONS TO DISPLAY
  222. 5006  '
  223. 5007  'RETURNED PARAMETERS:
  224. 5008  '   NONE
  225. 5009  '
  226. 5010  'COMMENT: UNUSED QUESTION STRINGS SHOULD BE SET
  227. 5011  '          TO NULL ("")
  228. 5012  '
  229. 5013  ' -------------------------------
  230. 5020  FOR I= 20 TO 23
  231. 5030   LOCATE I,1
  232. 5040   IF I > 20 THEN 5080
  233. 5050     FOR J= 1 TO 40           'DRAW A BORDER
  234. 5060       PRINT "-";
  235. 5070     NEXT J
  236. 5080   IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
  237. 5090   IF I = 22 THEN PRINT Q2$; 'SECOND QUESTION
  238. 5100   IF I = 23 THEN PRINT Q3$; 'THIRD QUESTION
  239. 5109  REM RESTORE CURSOR HERE AFTER 3RD QUEST
  240. 5110    CP1=POS(N)
  241. 5120    CP=POS(N)                'CURSOR COLUMN POSITION
  242. 5130    IF CP>40 THEN 5150
  243. 5140     PRINT " "; : GOTO 5120  'ERASE ANY PRIOR INFO
  244. 5149  REM RESTORE CURSOR FOR USER RESPONSE
  245. 5150  LOCATE I,CP1
  246. 5160  NEXT I
  247. 5170  RETURN
  248. 5400  REM         "INCH"
  249. 5401  ' ------------------------------
  250. 5402  '        INPUT CHARACTER
  251. 5403  '
  252. 5404  'CALLING PARAMETERS:
  253. 5405  '   NONE
  254. 5406  '
  255. 5407  'RETURNED PARAMETERS:
  256. 5408  '   CH$=INPUT CHARACTER
  257. 5409  '
  258. 5410  ' ------------------------------
  259. 5420  REM WAIT FOR INPUT CHARACTER
  260. 5430  CH$= INKEY$ : IF CH$="" THEN 5430
  261. 5440  Z=ASC(CH$)
  262. 5450  IF Z < 97 OR Z > 122 THEN 5470
  263. 5460  Z=Z-32
  264. 5470  CH$=CHR$(Z)
  265. 5480  RETURN
  266. 6200  REM            "INIT"
  267. 6201  '----------------------------------
  268. 6202  '         INITIALIZE DISPLAY
  269. 6203  '
  270. 6204  'THIS ROUTINE CLEARS THE SCREEN
  271. 6205  '   AND PRINTS THE PROGRAM TITLE
  272. 6206  'CALLING PARAMETERS:
  273. 6207  '   N$=TITLE OF PROGRAM
  274. 6208  '
  275. 6209  'RETURNED PARAMETERS:
  276. 6210  '   NONE
  277. 6211  '
  278. 6212  ' ----------------------------------
  279. 6220  CLS                                 'CLEAR SCREEN
  280. 6230  PRINT N$    : PRINT                 'TITLE
  281. 6240  KEY OFF
  282. 6250  RETURN
  283. 7000  REM         "MENU"
  284. 7001  ' ------------------------------
  285. 7002  '        MENU PROGRAM
  286. 7003  '
  287. 7004  'THIS PROGRAM DISPLAYS A MENUE
  288. 7005  '  AND CHOOSES A PROGRAM
  289. 7006  'CALLING PARAMETERS:
  290. 7007  '  N= NO. OF MENU ITEMS
  291. 7008  '  X$(I)= ARRAY OF PROGRAM NAMES
  292. 7009  '
  293. 7010  'RETURNED PARAMETERS:
  294. 7011  '  X=PROGRAM NUMBER CHOSEN
  295. 7012  '
  296. 7013  ' ------------------------------
  297. 7020  CLS
  298. 7030  FOR I = 1 TO N               'DISPLAY MENU
  299. 7040    IF I=10 THEN PRINT 0; ELSE PRINT I;
  300. 7050     PRINT  "= " ; X$(I)
  301. 7060  NEXT I
  302. 7070  Q1$="" : Q2$=""
  303. 7080  Q3$="CHOOSE PROGRAM :"
  304. 7085  PRINT:PRINT "  Press F10 to EXIT program.
  305. 7090  GOSUB 5000                   'ASK QUESTIONS
  306. 7100  GOSUB 5400                   'INPUT CHAR
  307. 7110  X= VAL(CH$)
  308. 7119  REM SEE IF CHAR IN RANGE
  309. 7120  IF X>=1 AND X<=N THEN RETURN
  310. 7130  IF X=0 AND N=10 THEN 7140 ELSE 7150
  311. 7140  X=10 : RETURN
  312. 7150  Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
  313. 7160  GOSUB 5000
  314. 7170  GOTO 7100
  315. 7400  REM          "PAUSE"
  316. 7401  ' -------------------------------
  317. 7402  '       WAIT FOR ANY KEY
  318. 7403  '
  319. 7404  'THIS ROUTINE WAITS FOR USER TO STRIKE KEY
  320. 7405  '
  321. 7406  'CALLING PARAMETERS:
  322. 7407  '  NONE
  323. 7408  '
  324. 7409  'RETURNED PARAMETERS
  325. 7410  '  NONE
  326. 7411  '
  327. 7412  ' -------------------------------
  328. 7420  Q1$="STRIKE ANY KEY TO CONTINUE"
  329. 7430  Q2$="" : Q3$=""
  330. 7440  GOSUB 5000                        'CALL DIALOG
  331. 7450  X$=INKEY$ : IF X$ = "" THEN 7450  'WAIT FOR KEY
  332. 7460  RETURN
  333. 7800  REM          "YESNO"
  334. 7801  ' -------------------------------
  335. 7802  '            YES-NO
  336. 7803  '
  337. 7804  'CALLING PARAMETERS:
  338. 7805  '  NONE
  339. 7806  '
  340. 7807  'RETURNED PARAMETERS:
  341. 7808  '  YN$= CONTAINS A Y OR N
  342. 7809  '
  343. 7810  ' -------------------------------
  344. 7815  LOCATE 23,24:PRINT "Press F10 to EXIT program.
  345. 7820  REM WAIT FOR KEY TO BE STRUCK
  346. 7830  YN$=INKEY$ : IF YN$="" THEN 7830
  347. 7840  IF YN$="y" THEN YN$="Y"
  348. 7850  IF YN$="n" THEN YN$="N"
  349. 7860  IF YN$ = "Y" OR YN$ = "N" THEN 7890
  350. 7870  REM NOT YES OR NO TRY AGAIN
  351. 7880  GOTO 7830
  352. 7890  PRINT YN$  :  RETURN
  353.